<script>
import { useUserStore } from '@/store';
import { ROLE_TYPE, HOME_ROUTE_MAP } from '@/config/app';
import { checkLogin, getToken } from '@/utils/login';

// 定义应用实例
const App = {
  onLaunch() {
    uni.getSystemInfo({
      success: (result) => {
        // 将statusBarHeight转换为rpx
        console.log('result', result);

        const statusBarHeightRPX = result.statusBarHeight * (750 / result.screenWidth);

        uni.setStorageSync('GM_STATUS_BAR_HEIGHT', statusBarHeightRPX)
      }
    })
    console.log('应用启动');
    // 初始化应用前先检查并刷新token
    this.checkTokenAndInit();
  },
  onShow() {
    const userStore = useUserStore();

    // 同步token到store - 修复版：同时获取并传递refreshToken
    const accessToken = getToken();
    const refreshToken = uni.getStorageSync("refreshToken"); // 获取refreshToken
    if (accessToken && accessToken !== userStore.accessToken) {
      userStore.setToken(accessToken, refreshToken); // 同时传递两个参数
    }

    // 应用从后台进入前台时检查token
    this.checkTokenOnAppShow();

    // 每次显示应用时通知tabbar更新状态
    uni.$emit('pageShow');
  },
  methods: {
    // 重构token检查和应用初始化流程
    async checkTokenAndInit() {
      try {
        const hasToken = !!getToken();
        if (hasToken) {
          // 有token时才进行检查和刷新
          console.log('应用启动时检查token状态');

          console.log('应用启动时token检查完成');
        }
        // 无论token检查结果如何，都继续应用初始化
        this.initApp();
      } catch (error) {
        console.error('应用启动时token检查失败:', error);
        // 显示友好的错误提示
        uni.showToast({
          title: '初始化失败，请检查网络',
          icon: 'none'
        });
        // 检查失败也继续初始化，让初始化逻辑决定后续操作
        this.initApp();
      }
    },

    async checkTokenOnAppShow() {
      try {
        const hasToken = !!getToken();
        if (hasToken) {
          // 有token时才进行检查和刷新
          console.log('应用切换到前台时检查token状态');

          console.log('应用切换到前台时token检查完成');
        }
      } catch (error) {
        console.error('应用切换到前台时token检查失败:', error);
        // 切换前台时检查失败可以不做特殊处理，让下一次请求时再处理
      }
    },

    async initApp() {
      return
      try {
        const userStore = useUserStore();
        console.log('1. 初始化userStore:', userStore);

        // 从本地存储加载token
        const token = getToken();
        const refreshToken = uni.getStorageSync("refreshToken"); // 获取refreshToken

        // 如果没有token，跳转到登录页面
        if (!token) {
          console.log('没有检测到token，跳转到登录页面');
          // 使用防抖处理，避免短时间内多次跳转
          this.safeNavigate('/public/login/login');
          return;
        }

        // 设置token到store - 同时传递accessToken和refreshToken
        userStore.setToken(token, refreshToken);

        // 直接使用store中的角色
        console.log('2. 当前用户角色:', userStore.role);

        // 获取对应角色的首页路由
        const targetRoute = HOME_ROUTE_MAP[userStore.role];
        if (!targetRoute) {
          console.warn('未找到对应角色的首页路由，使用默认路由');
          // 使用默认路由作为后备方案
          this.safeNavigate('/pages/customer/index/index');
          return;
        }

        console.log('3. 目标首页路由:', targetRoute);

        // 使用防抖处理，避免短时间内多次跳转
        this.safeNavigate(targetRoute);
      } catch (error) {
        console.error('应用初始化失败:', error);
        // 显示友好的错误提示
        uni.showToast({
          title: '应用初始化失败',
          icon: 'none'
        });
        // 失败时跳转到登录页面
        this.safeNavigate('/public/login/login');
      }
    },

    // 安全导航方法，避免短时间内多次跳转
    safeNavigate(url) {
      // 添加防抖逻辑，避免短时间内多次跳转
      if (this.lastNavigationTime && Date.now() - this.lastNavigationTime < 500) {
        console.log('导航过于频繁，忽略此次导航');
        return;
      }

      this.lastNavigationTime = Date.now();

      uni.reLaunch({
        url: url,
        fail: (err) => {
          console.error('页面跳转失败:', err);
          // 跳转失败时显示错误提示
          uni.showToast({
            title: '页面跳转失败，请重试',
            icon: 'none'
          });
        }
      });
    }
  }
};

export default App;
</script>

<style lang="scss">
	@import "./ui.scss";
</style>